package 集合泛型练习;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class List集合1 {
    public static void main(String[] args) {
        //1.创建list接口的多态对象
        List<String> list=new ArrayList<>();
        list.add("喜羊羊");
        list.add("美羊羊");
        list.add("懒羊羊");
        list.add("沸羊羊");
        list.add("小肥羊");
        list.add("肥羊卷");
        System.out.println(list);
        //3.测试集合的迭代
        /**
         * 集合迭代方式
         * 1.for循环
         * 2.增强for循环
         * 3.iterator
         * 4.listIterator
         */
        //方式一:因为list集合是有序的,元素有下标,所以可以根据下标进行遍历
        //从哪开始:0到那结束list.size()-1长度减一,如何变化++
        for (int i = 0; i <list.size() ; i++) {
            System.out.println(list.get(i));
        }
        System.out.println("**********方式一***********");
        //方式二,因为普通for循环不安利效率低,语法复杂,所以使用高效for来遍历
        //格式for(本轮遍历到的元素类型 元素名:要 遍历的内容名){循环体}
        for (String s :list) {
            System.out.println(s);
        }
        System.out.println("********方式二*********");
        //方式三:从父接口中继承过了来的迭代器iterator
        //1.获取对应的迭代器对象
        Iterator<String> it=list.iterator();
        while (it.hasNext()){//判断是否有下一个元素可以迭代
            System.out.println(it.next());//打印当前获取到的元素
        }
        System.out.println("*********方式三***********");
        /**
         * 方式四:listIterator属于list接口特有的迭代器
         * Iterator<E>--父接口--hasNext() next()
         * ListIterator<E>--子接口--除了父接口的功能以外
         * 还有自己的特有功能,比如逆序遍历添加元素等等,但是不常用
         * public interface ListIterator<E>extends Iterator<E>
         */
        ListIterator<String> it2=list.listIterator();
        while (it2.hasNext()){
            System.out.println(it2.next());
        }
        System.out.println(list);
        System.out.println("listIterator的逆序遍历");
        ListIterator<String> it3=list.listIterator();
        while (it3.hasNext()){
            System.out.println(it3.next());
            if (!it3.hasNext()){//直到迭代器没有下一个元素可迭代--到最后了
                System.out.println("开始逆序迭代:");
                while (it3.hasPrevious()){//判断是否有上一个元素可以迭代
                    System.out.println(it3.previous());//打印获取到上一个元素
                }
                break;

            }
        }

    }
}
